﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MakeIT.MiraPark.Negocios;

namespace MiraPark
{
    public partial class FormPendencia : Form
    {
        private string operacao = "";

        public FormPendencia()
        {
            InitializeComponent();
        }

        private void FormContasAReceber_Load(object sender, EventArgs e)
        {
            //Popular a lista de pendencias cadastrados
            this.dateTimePickerIni.Value = DateTime.Today;
            this.dateTimePickerFim.Value = DateTime.Today;

            List<FormaPagamentoVO> listFormaPagamentoVOs = ModelBO.getFormaPagamentos();
            listFormaPagamentoVOs.Add(FormaPagamentoVO.CreateFormaPagamentoVO(-1, ""));
            this.comboBoxFormaPagamento.DataSource = listFormaPagamentoVOs;

            List<UsuarioVO> listUsuarioVOs = ModelBO.getUsuarios(null, null, true);
            List<IdValueVO> listIdValueVOs = new List<IdValueVO>();
            listIdValueVOs.Add(IdValueVO.CreateIdValueVO("-1", ""));
            foreach (UsuarioVO usuarioVO in listUsuarioVOs)
                listIdValueVOs.Add(IdValueVO.CreateIdValueVO(usuarioVO.idUsuario.ToString(), usuarioVO.nome));
            comboBoxOperador.DataSource = listIdValueVOs;
            comboBoxOperador.SelectedValue = "-1";

            buttonCancelar_Click(sender, e);

        }

        private void dataGridViewPendencia_SelectionChanged(object sender, EventArgs e)
        {
            setupButtonsControls();
        }

        private void buttonNovo_Click(object sender, EventArgs e)
        {
            this.operacao = "novo";
            setupButtonsControls();
        }

        private void buttonCancelar_Click(object sender, EventArgs e)
        {
            this.operacao = "cancelar";
            setupButtonsControls();
        }

        private void buttonEditar_Click(object sender, EventArgs e)
        {
            this.operacao = "editar";
            setupButtonsControls();
        }

        private void buttonExcluir_Click(object sender, EventArgs e)
        {
            this.operacao = "excluir";

            List<PendenciaVO> pendenciaList = (List<PendenciaVO>)this.dataGridViewPendencia.DataSource;
            PendenciaVO pendencia = pendenciaList[this.dataGridViewPendencia.CurrentRow.Index];
            DialogResult dr = MessageBox.Show(this, "Confirma a exclusão da pendência " + pendencia.pendencia, "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dr.ToString().Equals("Yes"))
            {
                ModelBO.delPendencia(pendencia);

                this.dataGridViewPendencia.DataSource = ModelBO.getPendencias();
                setupButtonsControls();
            }
        }

        private void buttonSalvar_Click(object sender, EventArgs e)
        {
            String erros = "";
            if (this.textBoxPendencia.Text.Trim().Length == 0)
                erros = erros + "Pendência deve ser informada.\r\n";
            if (int.Parse(this.comboBoxOperador.SelectedValue.ToString()) > 0 &&
                this.textBoxPlaca.Text.Length > 0)
                erros = erros + "Operador e Placa não podem ser informados simultaneamente";
            if (this.checkBoxPago.Checked && (int)this.comboBoxFormaPagamento.SelectedValue == -1)
                erros = erros + "Forma de pagamento deve ser informado quando houver pagamento.\r\n";

            if (erros.Length > 0)
            {
                MessageBox.Show(this, erros, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            PendenciaVO pendencia = null;

            if (this.operacao.Equals("novo"))
            {
                pendencia = PendenciaVO.CreatePendenciaVO();
                pendencia.pendencia = this.textBoxPendencia.Text;
                pendencia.placa = this.textBoxPlaca.Text;
                pendencia.valor = this.numericUpDownValor.Value;
                pendencia.idOperador = int.Parse(this.comboBoxOperador.SelectedValue.ToString());
                if (this.checkBoxPago.Checked)
                {
                    pendencia.dtPagamento = this.dateTimePickerPgto.Value;
                    pendencia.valorRec = this.numericUpDownValorPgto.Value;
                    pendencia.formaPagamentoVO.idFormaPagamento = (int)this.comboBoxFormaPagamento.SelectedValue;
                }

                ModelBO.newPendencia(pendencia);
            }
            if (this.operacao.Equals("editar"))
            {
                List<PendenciaVO> pendenciaList = (List<PendenciaVO>)this.dataGridViewPendencia.DataSource;
                pendencia = pendenciaList[this.dataGridViewPendencia.CurrentRow.Index];

                pendencia.pendencia = this.textBoxPendencia.Text;
                pendencia.placa = this.textBoxPlaca.Text;
                pendencia.valor = this.numericUpDownValor.Value;
                pendencia.idOperador = int.Parse(this.comboBoxOperador.SelectedValue.ToString());
                if (this.checkBoxPago.Checked)
                {
                    pendencia.dtPagamento = this.dateTimePickerPgto.Value;
                    pendencia.valorRec = this.numericUpDownValorPgto.Value;
                    pendencia.formaPagamentoVO.idFormaPagamento = (int)this.comboBoxFormaPagamento.SelectedValue;
                }
                else
                {
                    pendencia.dtPagamento = null;
                    pendencia.valorRec = 0;
                    pendencia.formaPagamentoVO.idFormaPagamento = -1;
                }

                ModelBO.setPendencia(pendencia);
            }
            this.operacao = "salvar";

            dataGridViewPendencia.DataSource = ModelBO.getPendencias();
            setupButtonsControls();
        }


        private void setupButtonsControls()
        {
            bool haRows = this.dataGridViewPendencia.Rows.Count > 0 && this.dataGridViewPendencia.CurrentRow!=null;
            bool novo = this.operacao.Equals("novo");
            bool edit = this.operacao.Equals("editar");
            bool canc = this.operacao.Equals("cancelar");

            this.buttonCancelar.Enabled = novo || edit;
            this.buttonNovo.Enabled = !novo && !edit;
            this.buttonEditar.Enabled = haRows && !novo && !edit;
            this.buttonExcluir.Enabled = haRows && !novo && !edit;
            this.buttonSalvar.Enabled = novo || edit;

            this.textBoxPendencia.Enabled = novo || edit;
            this.comboBoxOperador.Enabled = novo || edit;
            this.textBoxPlaca.Enabled = novo || edit;
            this.numericUpDownValor.Enabled = novo || edit;
            this.dateTimePickerPgto.Enabled = novo || edit;
            this.checkBoxPago.Enabled = novo || edit;
            this.numericUpDownValorPgto.Enabled = novo || edit;
            this.comboBoxFormaPagamento.Enabled = novo || edit;
            this.dataGridViewPendencia.Enabled = !novo && !edit;

            if (!haRows || novo)
            {
                this.textBoxId.Text = "";
                this.textBoxPendencia.Text = "";
                this.comboBoxOperador.SelectedValue = "-1";
                this.textBoxPlaca.Text = "";
                this.numericUpDownValor.Value = 0;
                this.checkBoxPago.Checked = false;
                this.dateTimePickerPgto.Value = DateTime.Now;
                this.numericUpDownValorPgto.Value = 0;
                this.comboBoxFormaPagamento.SelectedValue = -1;
            }
            else
            {
                List<PendenciaVO> pendenciaList = (List<PendenciaVO>)this.dataGridViewPendencia.DataSource;
                PendenciaVO pendencia = pendenciaList[this.dataGridViewPendencia.CurrentRow.Index];
                this.textBoxId.Text = pendencia.idPendencia.ToString();
                this.textBoxPendencia.Text = pendencia.pendencia;
                this.comboBoxOperador.SelectedValue = pendencia.idOperador.ToString();
                this.textBoxPlaca.Text = pendencia.placa;
                this.numericUpDownValor.Value = pendencia.valor;
                this.checkBoxPago.Checked = pendencia.dtPagamento != null;
                if (pendencia.dtPagamento != null)
                {
                    this.dateTimePickerPgto.Value = (DateTime)pendencia.dtPagamento;
                    this.numericUpDownValorPgto.Value = pendencia.valorRec;
                    this.comboBoxFormaPagamento.SelectedValue = pendencia.formaPagamentoVO.idFormaPagamento;
                }
            }
            if (novo || edit){
                this.textBoxPendencia.Focus();
            }
        }

        private void checkBoxPago_CheckedChanged(object sender, EventArgs e)
        {
            this.labelPgto.Visible = this.checkBoxPago.Checked;
            this.labelVlrPago.Visible = this.checkBoxPago.Checked;
            this.labelFormaPagamento.Visible = this.checkBoxPago.Checked;
            this.dateTimePickerPgto.Visible = this.checkBoxPago.Checked;
            this.numericUpDownValorPgto.Visible = this.checkBoxPago.Checked;
            this.comboBoxFormaPagamento.Visible = this.checkBoxPago.Checked;
        }

        private void buttonPesquisar_Click(object sender, EventArgs e)
        {
            this.dataGridViewPendencia.DataSource = ModelBO.getPendencias(null, null, null, 
                 this.radioButtonEmAberto.Checked || this.radioButtonTodos.Checked,
                 this.radioButtonPagos.Checked || this.radioButtonTodos.Checked,
                 this.dateTimePickerIni.Value, this.dateTimePickerFim.Value);
            setupButtonsControls();
        }

        private void dataGridViewPendencia_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;
            foreach (DataGridViewRow dgvr in dgv.Rows)
            {
                PendenciaVO pvo = (PendenciaVO)dgvr.DataBoundItem;
                UsuarioVO usuarioVO = ModelBO.getUsuario(pvo.idOperador, false, false);

                if (usuarioVO != null) dgvr.Cells["operador"].Value = usuarioVO.nome;
            }

        }

        private void buttonRecibo_Click(object sender, EventArgs e)
        {
            NumeroPorExtenso npe = new NumeroPorExtenso(this.numericUpDownValorPgto.Value);
            string pagador = "";
            if (!this.comboBoxOperador.SelectedValue.ToString().Equals("-1"))
                pagador = this.comboBoxOperador.SelectedText;


            EmpresaVO empresaVO = ModelBO.getEmpresa(int.Parse(ModelBO.getParametro("Empresa Ativa")));
            List<EmpresaVO> listEmpresaVOs = new List<EmpresaVO>();
            listEmpresaVOs.Add(empresaVO);

            FormReportRecibo formx = new FormReportRecibo();
            formx.MdiParent = this.MdiParent;
            formx.setDataSource(listEmpresaVOs, pagador, empresaVO.nome, "", "", this.numericUpDownValor.Value, npe.ToString(), empresaVO.cidade, this.textBoxPendencia.Text);
            formx.Show();

        }
    }
}
